package SERVEUR.OperateurSystem;


import MetierOperateurSystem.GestionAuthentificationImpl;
import MetierOperateurSystem.GestionColisImpl;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.omg.CosNaming.NamingContext;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;

public class main {

	public static void main(String[] args) {
		try {
	        // Intialisation de l'ORB
	        //************************
	        org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);

	        // Gestion du POA
	        //****************
	        // Recuperation du POA
	        POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

	        // Creation des servant
	        //*********************
	        MetierOperateurSystem.GestionAuthentificationImpl maGestionAuthImpl = GestionAuthentificationImpl.getInstance(); 
	        MetierOperateurSystem.GestionColisImpl maGestionColisImpl = GestionColisImpl.getInstance();

	        // Activer le servant au sein du POA et recuperer son ID
	        byte[] servantGestAuth = rootPOA.activate_object(maGestionAuthImpl);
	        byte[] servantGestColis = rootPOA.activate_object(maGestionColisImpl);

	        // Activer le POA manager
	        rootPOA.the_POAManager().activate();



	        // Enregistrement dans le service de nommage
	        //*******************************************
	        // Recuperation du naming service
	        NamingContext nameRoot=org.omg.CosNaming.NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));
	               
	        // Construction du nom a enregistrer
	        org.omg.CosNaming.NameComponent[] nameToRegister1 = new org.omg.CosNaming.NameComponent[1];
	        org.omg.CosNaming.NameComponent[] nameToRegister2 = new org.omg.CosNaming.NameComponent[1];
	        String nomObj = "OperateurSystemGestAuth";
	        String nomObj2 ="OperateurSystemGestColis";
	        nameToRegister1[0] = new org.omg.CosNaming.NameComponent(nomObj,"");
	        nameToRegister2[0] = new org.omg.CosNaming.NameComponent(nomObj2,"");

	        // Enregistrement de l'objet CORBA dans le service de noms
	        nameRoot.rebind(nameToRegister1,rootPOA.servant_to_reference(maGestionAuthImpl));
	        nameRoot.rebind(nameToRegister2,rootPOA.servant_to_reference(maGestionColisImpl));
	        System.out.println("==> Nom '"+ nomObj + "' est enregistre dans le service de noms.");
	        System.out.println("==> Nom '"+ nomObj2 + "' est enregistre dans le service de noms.");

	        String IORServant1 = orb.object_to_string(rootPOA.servant_to_reference(maGestionAuthImpl));
	        String IORServant2 = orb.object_to_string(rootPOA.servant_to_reference(maGestionColisImpl));
	        System.out.println("L'objet "+nomObj+" possede la reference suivante :");
	        System.out.println(IORServant1);
	        System.out.println("L'objet "+nomObj2+" possede la reference suivante :");
	        System.out.println(IORServant2);
	        // Lancement de l'ORB et mise en attente de requete
	        //**************************************************
	        orb.run();

	    }
		catch (Exception e) {
			e.printStackTrace();
		}
	}

}
